home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 March / PCWMAR09.iso / Software / Freeware / NSIS 2.41 / nsis-2.41-setup.exe / Examples / LogicLib.nsi < prev    next >
Encoding:
Text File  |  2008-06-13  |  11.9 KB  |  600 lines

  1. !verbose 2
  2.  
  3. Name "NSIS LogicLib Example"
  4. OutFile "LogicLib.exe"
  5. ShowInstDetails show
  6. RequestExecutionLevel user
  7.  
  8. !include "LogicLib.nsh"
  9.  
  10. ;!undef LOGICLIB_VERBOSITY
  11. ;!define LOGICLIB_VERBOSITY 4   ; For debugging - watch what logiclib does with your code!
  12.  
  13. Page components "" "" ComponentsLeave
  14. Page instfiles
  15.  
  16. Section /o "Run tests" TESTS
  17.  
  18.   ; kinds of if other than "value1 comparison value2"
  19.   ClearErrors
  20.   FindFirst $R1 $R2 "$PROGRAMFILES\*"
  21.   ${Unless} ${Errors}
  22.     ${Do}
  23.       ${Select} $R2
  24.         ${Case2} "." ".."
  25.           ; Do nothing
  26.         ${CaseElse}
  27.           DetailPrint "Found $PROGRAMFILES\$R2"
  28.       ${EndSelect}
  29.       FindNext $R1 $R2
  30.     ${LoopUntil} ${Errors}
  31.     FindClose $R1
  32.   ${EndUnless}
  33.  
  34.   ${If} ${FileExists} "${__FILE__}"
  35.     DetailPrint 'Source file "${__FILE__}" still exists'
  36.   ${Else}
  37.     DetailPrint 'Source file "${__FILE__}" has gone'
  38.   ${EndIf}
  39.  
  40.   ; if..endif
  41.   StrCpy $R1 1
  42.   StrCpy $R2 ""
  43.   ${If} $R1 = 1
  44.     StrCpy $R2 $R2A
  45.   ${EndIf}
  46.   ${If} $R1 = 2
  47.     StrCpy $R2 $R2B
  48.   ${EndIf}
  49.   ${If} $R1 < 2
  50.     StrCpy $R2 $R2C
  51.   ${EndIf}
  52.   ${If} $R1 < -2
  53.     StrCpy $R2 $R2D
  54.   ${EndIf}
  55.   ${If} $R1 > 2
  56.     StrCpy $R2 $R2E
  57.   ${EndIf}
  58.   ${If} $R1 > -2
  59.     StrCpy $R2 $R2F
  60.   ${EndIf}
  61.   ${If} $R1 <> 1
  62.     StrCpy $R2 $R2G
  63.   ${EndIf}
  64.   ${If} $R1 <> 2
  65.     StrCpy $R2 $R2H
  66.   ${EndIf}
  67.   ${If} $R1 >= 2
  68.     StrCpy $R2 $R2I
  69.   ${EndIf}
  70.   ${If} $R1 >= -2
  71.     StrCpy $R2 $R2J
  72.   ${EndIf}
  73.   ${If} $R1 <= 2
  74.     StrCpy $R2 $R2K
  75.   ${EndIf}
  76.   ${If} $R1 <= -2
  77.     StrCpy $R2 $R2L
  78.   ${EndIf}
  79.   ${If} $R2 == "ACFHJK"
  80.     DetailPrint "PASSED If..EndIf test"
  81.   ${Else}
  82.     DetailPrint "FAILED If..EndIf test"
  83.   ${EndIf}
  84.  
  85.   ; if..elseif..else..endif
  86.   StrCpy $R1 A
  87.   StrCpy $R2 ""
  88.   ${If} $R1 == A
  89.     StrCpy $R2 $R2A
  90.   ${ElseIf} $R1 == B
  91.     StrCpy $R2 $R2B
  92.   ${ElseUnless} $R1 != C
  93.     StrCpy $R2 $R2C
  94.   ${Else}
  95.     StrCpy $R2 $R2D
  96.   ${EndIf}
  97.   ${If} $R1 == D
  98.     StrCpy $R2 $R2D
  99.   ${ElseIf} $R1 == A
  100.     StrCpy $R2 $R2A
  101.   ${ElseUnless} $R1 != B
  102.     StrCpy $R2 $R2B
  103.   ${Else}
  104.     StrCpy $R2 $R2C
  105.   ${EndIf}
  106.   ${If} $R1 == C
  107.     StrCpy $R2 $R2C
  108.   ${ElseIf} $R1 == D
  109.     StrCpy $R2 $R2D
  110.   ${ElseUnless} $R1 != A
  111.     StrCpy $R2 $R2A
  112.   ${Else}
  113.     StrCpy $R2 $R2B
  114.   ${EndIf}
  115.   ${If} $R1 == B
  116.     StrCpy $R2 $R2B
  117.   ${ElseIf} $R1 == C
  118.     StrCpy $R2 $R2C
  119.   ${ElseUnless} $R1 != D
  120.     StrCpy $R2 $R2D
  121.   ${Else}
  122.     StrCpy $R2 $R2A
  123.   ${EndIf}
  124.   ${If} $R2 == "$R1$R1$R1$R1"
  125.     DetailPrint "PASSED If..ElseIf..Else..EndIf test"
  126.   ${Else}
  127.     DetailPrint "FAILED If..ElseIf..Else..EndIf test"
  128.   ${EndIf}
  129.  
  130.   ; if..andif..orif..endif
  131.   StrCpy $R2 ""
  132.   ${If} 1 = 1
  133.   ${AndIf} 2 = 2
  134.     StrCpy $R2 $R2A
  135.   ${Else}
  136.     StrCpy $R2 $R2B
  137.   ${EndIf}
  138.   ${If} 1 = 1
  139.   ${AndIf} 2 = 3
  140.     StrCpy $R2 $R2B
  141.   ${Else}
  142.     StrCpy $R2 $R2A
  143.   ${EndIf}
  144.   ${If} 1 = 2
  145.   ${AndIf} 2 = 2
  146.     StrCpy $R2 $R2B
  147.   ${Else}
  148.     StrCpy $R2 $R2A
  149.   ${EndIf}
  150.   ${If} 1 = 2
  151.   ${AndIf} 2 = 3
  152.     StrCpy $R2 $R2B
  153.   ${Else}
  154.     StrCpy $R2 $R2A
  155.   ${EndIf}
  156.  
  157.   ${If} 1 = 1
  158.   ${OrIf} 2 = 2
  159.     StrCpy $R2 $R2A
  160.   ${Else}
  161.     StrCpy $R2 $R2B
  162.   ${EndIf}
  163.   ${If} 1 = 1
  164.   ${OrIf} 2 = 3
  165.     StrCpy $R2 $R2A
  166.   ${Else}
  167.     StrCpy $R2 $R2B
  168.   ${EndIf}
  169.   ${If} 1 = 2
  170.   ${OrIf} 2 = 2
  171.     StrCpy $R2 $R2A
  172.   ${Else}
  173.     StrCpy $R2 $R2B
  174.   ${EndIf}
  175.   ${If} 1 = 2
  176.   ${OrIf} 2 = 3
  177.     StrCpy $R2 $R2B
  178.   ${Else}
  179.     StrCpy $R2 $R2A
  180.   ${EndIf}
  181.  
  182.   ${If} 1 = 1
  183.   ${AndIf} 2 = 2
  184.   ${OrIf} 3 = 3
  185.     StrCpy $R2 $R2A
  186.   ${Else}
  187.     StrCpy $R2 $R2B
  188.   ${EndIf}
  189.   ${If} 1 = 1
  190.   ${AndIf} 2 = 3
  191.   ${OrIf} 3 = 3
  192.     StrCpy $R2 $R2A
  193.   ${Else}
  194.     StrCpy $R2 $R2B
  195.   ${EndIf}
  196.   ${If} 1 = 2
  197.   ${AndIf} 2 = 2
  198.   ${OrIf} 3 = 3
  199.     StrCpy $R2 $R2A
  200.   ${Else}
  201.     StrCpy $R2 $R2B
  202.   ${EndIf}
  203.   ${If} 1 = 2
  204.   ${AndIf} 2 = 3
  205.   ${OrIf} 3 = 3
  206.     StrCpy $R2 $R2A
  207.   ${Else}
  208.     StrCpy $R2 $R2B
  209.   ${EndIf}
  210.   ${If} 1 = 1
  211.   ${AndIf} 2 = 2
  212.   ${OrIf} 3 = 4
  213.     StrCpy $R2 $R2A
  214.   ${Else}
  215.     StrCpy $R2 $R2B
  216.   ${EndIf}
  217.   ${If} 1 = 1
  218.   ${AndIf} 2 = 3
  219.   ${OrIf} 3 = 4
  220.     StrCpy $R2 $R2B
  221.   ${Else}
  222.     StrCpy $R2 $R2A
  223.   ${EndIf}
  224.   ${If} 1 = 2
  225.   ${AndIf} 2 = 2
  226.   ${OrIf} 3 = 4
  227.     StrCpy $R2 $R2B
  228.   ${Else}
  229.     StrCpy $R2 $R2A
  230.   ${EndIf}
  231.   ${If} 1 = 2
  232.   ${AndIf} 2 = 3
  233.   ${OrIf} 3 = 4
  234.     StrCpy $R2 $R2B
  235.   ${Else}
  236.     StrCpy $R2 $R2A
  237.   ${EndIf}
  238.  
  239.   ${If} 1 = 1
  240.   ${OrIf} 2 = 2
  241.   ${AndIf} 3 = 3
  242.     StrCpy $R2 $R2A
  243.   ${Else}
  244.     StrCpy $R2 $R2B
  245.   ${EndIf}
  246.   ${If} 1 = 1
  247.   ${OrIf} 2 = 3
  248.   ${AndIf} 3 = 3
  249.     StrCpy $R2 $R2A
  250.   ${Else}
  251.     StrCpy $R2 $R2B
  252.   ${EndIf}
  253.   ${If} 1 = 2
  254.   ${OrIf} 2 = 2
  255.   ${AndIf} 3 = 3
  256.     StrCpy $R2 $R2A
  257.   ${Else}
  258.     StrCpy $R2 $R2B
  259.   ${EndIf}
  260.   ${If} 1 = 2
  261.   ${OrIf} 2 = 3
  262.   ${AndIf} 3 = 3
  263.     StrCpy $R2 $R2B
  264.   ${Else}
  265.     StrCpy $R2 $R2A
  266.   ${EndIf}
  267.   ${If} 1 = 1
  268.   ${OrIf} 2 = 2
  269.   ${AndIf} 3 = 4
  270.     StrCpy $R2 $R2B
  271.   ${Else}
  272.     StrCpy $R2 $R2A
  273.   ${EndIf}
  274.   ${If} 1 = 1
  275.   ${OrIf} 2 = 3
  276.   ${AndIf} 3 = 4
  277.     StrCpy $R2 $R2B
  278.   ${Else}
  279.     StrCpy $R2 $R2A
  280.   ${EndIf}
  281.   ${If} 1 = 2
  282.   ${OrIf} 2 = 2
  283.   ${AndIf} 3 = 4
  284.     StrCpy $R2 $R2B
  285.   ${Else}
  286.     StrCpy $R2 $R2A
  287.   ${EndIf}
  288.   ${If} 1 = 2
  289.   ${OrIf} 2 = 3
  290.   ${AndIf} 3 = 4
  291.     StrCpy $R2 $R2B
  292.   ${Else}
  293.     StrCpy $R2 $R2A
  294.   ${EndIf}
  295.  
  296.   ${If} $R2 == "AAAAAAAAAAAAAAAAAAAAAAAA"
  297.     DetailPrint "PASSED If..AndIf..OrIf..Else..EndIf test"
  298.   ${Else}
  299.     DetailPrint "FAILED If..AndIf..OrIf..Else..EndIf test"
  300.   ${EndIf}
  301.  
  302.   ; ifthen..|..|
  303.   StrCpy $R1 1
  304.   StrCpy $R2 ""
  305.   ${IfThen} $R1 = 1 ${|} StrCpy $R2 $R2A ${|}
  306.   ${IfThen} $R1 = 2 ${|} StrCpy $R2 $R2B ${|}
  307.   ${IfNotThen} $R1 = 1 ${|} StrCpy $R2 $R2C ${|}
  308.   ${IfNotThen} $R1 = 2 ${|} StrCpy $R2 $R2D ${|}
  309.   ${If} $R2 == "AD"
  310.     DetailPrint "PASSED IfThen test"
  311.   ${Else}
  312.     DetailPrint "FAILED IfThen test"
  313.   ${EndIf}
  314.  
  315.   ; ifcmd..||..| and if/unless cmd
  316.   StrCpy $R2 ""
  317.   ${IfCmd} MessageBox MB_YESNO "Please click Yes" IDYES ${||} StrCpy $R2 $R2A ${|}
  318.   ${Unless} ${Cmd} `MessageBox MB_YESNO|MB_DEFBUTTON2 "Please click No" IDYES`
  319.     StrCpy $R2 $R2B
  320.   ${EndUnless}
  321.   ${If} $R2 == "AB"
  322.     DetailPrint "PASSED IfCmd/If Cmd test"
  323.   ${Else}
  324.     DetailPrint "FAILED IfCmd/If Cmd test"
  325.   ${EndIf}
  326.  
  327.   ; select..case..case2..case3..case4..case5..caseelse..endselect
  328.   StrCpy $R1 1
  329.   StrCpy $R2 ""
  330.   ${Select} $R1
  331.     ${Case} "1"
  332.       StrCpy $R2 $R2A
  333.     ${Case} "2"
  334.       StrCpy $R2 $R2B
  335.     ${Case2} "3" "4"
  336.       StrCpy $R2 $R2C
  337.     ${CaseElse}
  338.       StrCpy $R2 $R2D
  339.   ${EndSelect}
  340.   ${Select} $R1
  341.     ${Case} "2"
  342.       StrCpy $R2 $R2A
  343.     ${Case} "3"
  344.       StrCpy $R2 $R2B
  345.     ${Case2} "4" "5"
  346.       StrCpy $R2 $R2C
  347.     ${CaseElse}
  348.       StrCpy $R2 $R2D
  349.   ${EndSelect}
  350.   ${Select} $R1
  351.     ${Case} "3"
  352.       StrCpy $R2 $R2A
  353.     ${Case} "4"
  354.       StrCpy $R2 $R2B
  355.     ${Case2} "5" "1"
  356.       StrCpy $R2 $R2C
  357.     ${CaseElse}
  358.       StrCpy $R2 $R2D
  359.   ${EndSelect}
  360.   ${Select} $R1
  361.     ${Case} "4"
  362.       StrCpy $R2 $R2A
  363.     ${Case} "5"
  364.       StrCpy $R2 $R2B
  365.     ${Case2} "1" "2"
  366.       StrCpy $R2 $R2C
  367.     ${CaseElse}
  368.       StrCpy $R2 $R2D
  369.   ${EndSelect}
  370.   ${If} $R2 == "ADCC"
  371.     DetailPrint "PASSED Select..Case*..EndSelect test"
  372.   ${Else}
  373.     DetailPrint "FAILED Select..Case*..EndSelect test"
  374.   ${EndIf}
  375.  
  376.   ; switch..case..caseelse..endswitch
  377.   StrCpy $R2 ""
  378.   ${For} $R1 1 10
  379.     ${Switch} $R1
  380.       ${Case} 3
  381.         StrCpy $R2 $R2A
  382.       ${Case} 4
  383.         StrCpy $R2 $R2B
  384.         ${Break}
  385.       ${Case} 5
  386.         StrCpy $R2 $R2C
  387.     ${EndSwitch}
  388.     ${Switch} $R1
  389.       ${Case} 1
  390.         StrCpy $R2 $R2D
  391.       ${Default}
  392.         StrCpy $R2 $R2E
  393.         ${Break}
  394.       ${Case} 2
  395.         StrCpy $R2 $R2F
  396.     ${EndSwitch}
  397.     ${Switch} $R1
  398.       ${Case} 6
  399.       ${Case} 7
  400.         StrCpy $R2 $R2G
  401.         ${If} $R1 = 6
  402.       ${Case} 8
  403.           StrCpy $R2 $R2H
  404.           ${Switch} $R1
  405.             ${Case} 6
  406.               StrCpy $R2 $R2I
  407.               ${Break}
  408.             ${Case} 8
  409.               StrCpy $R2 $R2J
  410.           ${EndSwitch}
  411.         ${EndIf}
  412.         StrCpy $R2 $R2K
  413.         ${Break}
  414.       ${Default}
  415.         StrCpy $R2 $R2L
  416.       ${Case} 9
  417.         StrCpy $R2 $R2M
  418.     ${EndSwitch}
  419.   ${Next}
  420.   ${If} $R2 == "DELMFLMABELMBELMCELMEGHIKEGKEHJKEMELM"
  421.     DetailPrint "PASSED Switch..Case*..EndSwitch test"
  422.   ${Else}
  423.     DetailPrint "FAILED Switch..Case*..EndSwitch test"
  424.   ${EndIf}
  425.  
  426.   ; for[each]..exitfor..next
  427.   StrCpy $R2 ""
  428.   ${For} $R1 1 5
  429.     StrCpy $R2 $R2$R1
  430.   ${Next}
  431.   ${ForEach} $R1 10 1 - 1
  432.     StrCpy $R2 $R2$R1
  433.   ${Next}
  434.   ${For} $R1 1 0
  435.     StrCpy $R2 $R2$R1
  436.   ${Next}
  437.   ${If} $R2 == "1234510987654321"
  438.     DetailPrint "PASSED For[Each]..Next test"
  439.   ${Else}
  440.     DetailPrint "FAILED For[Each]..Next test"
  441.   ${EndIf}
  442.  
  443.   ; do..exitdo..loop
  444.   StrCpy $R1 0
  445.   StrCpy $R2 ""
  446.   ${Do}
  447.     StrCpy $R2 $R2$R1
  448.     IntOp $R1 $R1 + 1
  449.     ${If} $R1 > 10
  450.       ${ExitDo}
  451.     ${EndIf}
  452.   ${Loop}
  453.   ${If} $R2 == "012345678910"
  454.     DetailPrint "PASSED Do..ExitDo..Loop test"
  455.   ${Else}
  456.     DetailPrint "FAILED Do..ExitDo..Loop test"
  457.   ${EndIf}
  458.  
  459.   ; do..exitdo..loopuntil
  460.   StrCpy $R1 0
  461.   StrCpy $R2 ""
  462.   ${Do}
  463.     StrCpy $R2 $R2$R1
  464.     IntOp $R1 $R1 + 1
  465.   ${LoopUntil} $R1 >= 5
  466.   ${If} $R2 == "01234"
  467.     DetailPrint "PASSED Do..ExitDo..LoopUntil test"
  468.   ${Else}
  469.     DetailPrint "FAILED Do..ExitDo..LoopUntil test"
  470.   ${EndIf}
  471.  
  472.   ; dountil..exitdo..loop
  473.   StrCpy $R1 0
  474.   StrCpy $R2 ""
  475.   ${DoUntil} $R1 >= 5
  476.     StrCpy $R2 $R2$R1
  477.     IntOp $R1 $R1 + 1
  478.   ${Loop}
  479.   ${If} $R2 == "01234"
  480.     DetailPrint "PASSED DoUntil..ExitDo..Loop test"
  481.   ${Else}
  482.     DetailPrint "FAILED DoUntil..ExitDo..Loop test"
  483.   ${EndIf}
  484.  
  485.   ; nested do test
  486.   StrCpy $R1 0
  487.   StrCpy $R2 0
  488.   StrCpy $R3 ""
  489.   ${Do}
  490.     StrCpy $R3 $R3$R1$R2
  491.     IntOp $R1 $R1 + 1
  492.     ${If} $R1 > 5
  493.       ${ExitDo}
  494.     ${EndIf}
  495.     StrCpy $R2 0
  496.     ${Do}
  497.       StrCpy $R3 $R3$R1$R2
  498.       IntOp $R2 $R2 + 1
  499.       ${If} $R2 >= 5
  500.         ${ExitDo}
  501.       ${EndIf}
  502.     ${Loop}
  503.   ${Loop}
  504.   ${If} $R3 == "00101112131415202122232425303132333435404142434445505152535455"
  505.     DetailPrint "PASSED nested Do test"
  506.   ${Else}
  507.     DetailPrint "FAILED nested Do test"
  508.   ${EndIf}
  509.  
  510.   ; while..exitwhile..endwhile (exact replica of dowhile..enddo}
  511.   StrCpy $R1 0
  512.   StrCpy $R2 ""
  513.   ${While} $R1 < 5
  514.     StrCpy $R2 $R2$R1
  515.     IntOp $R1 $R1 + 1
  516.   ${EndWhile}
  517.   ${If} $R2 == "01234"
  518.     DetailPrint "PASSED While..ExitWhile..EndWhile test"
  519.   ${Else}
  520.     DetailPrint "FAILED While..ExitWhile..EndWhile test"
  521.   ${EndIf}
  522.  
  523.   ; Unsigned integer tests
  524.   StrCpy $R2 ""
  525.   ${If} -1 < 1
  526.     StrCpy $R2 $R2A
  527.   ${EndIf}
  528.   ${If} -1 U< 1
  529.     StrCpy $R2 $R2B
  530.   ${EndIf}
  531.   ${If} 0xFFFFFFFF > 1
  532.     StrCpy $R2 $R2C
  533.   ${EndIf}
  534.   ${If} 0xFFFFFFFF U> 1
  535.     StrCpy $R2 $R2D
  536.   ${EndIf}
  537.   ${If} $R2 == "AD"
  538.     DetailPrint "PASSED unsigned integer test"
  539.   ${Else}
  540.     DetailPrint "FAILED unsigned integer test"
  541.   ${EndIf}
  542.  
  543.   ; 64-bit integer tests (uses System.dll)
  544.   StrCpy $R2 ""
  545.   ${If} 0x100000000 L= 4294967296
  546.     StrCpy $R2 $R2A
  547.   ${EndIf}
  548.   ${If} 0x100000000 L< 0x200000000
  549.     StrCpy $R2 $R2B
  550.   ${EndIf}
  551.   ${If} 0x500000000 L>= 0x500000000
  552.     StrCpy $R2 $R2C
  553.   ${EndIf}
  554.   ${If} $R2 == "ABC"
  555.     DetailPrint "PASSED 64-bit integer test"
  556.   ${Else}
  557.     DetailPrint "FAILED 64-bit integer test"
  558.   ${EndIf}
  559.  
  560.   ; Extra string tests (uses System.dll)
  561.   StrCpy $R2 ""
  562.   ${If} "A" S< "B"
  563.     StrCpy $R2 $R2A
  564.   ${EndIf}
  565.   ${If} "b" S> "A"
  566.     StrCpy $R2 $R2B
  567.   ${EndIf}
  568.   ${If} "a" S<= "B"
  569.     StrCpy $R2 $R2C
  570.   ${EndIf}
  571.   ${If} "B" S< "B"
  572.     StrCpy $R2 $R2D
  573.   ${EndIf}
  574.   ${If} "A" S== "A"
  575.     StrCpy $R2 $R2E
  576.   ${EndIf}
  577.   ${If} "A" S== "a"
  578.     StrCpy $R2 $R2F
  579.   ${EndIf}
  580.   ${If} "A" S!= "a"
  581.     StrCpy $R2 $R2G
  582.   ${EndIf}
  583.   ${If} $R2 == "ABCEG"
  584.     DetailPrint "PASSED extra string test"
  585.   ${Else}
  586.     DetailPrint "FAILED extra string test"
  587.   ${EndIf}
  588.  
  589. SectionEnd
  590.  
  591. Function ComponentsLeave
  592.   ; Section flags tests (requires sections.nsh be included)
  593.   ${Unless} ${SectionIsSelected} ${TESTS}
  594.     MessageBox MB_OK "Please select the component"
  595.     Abort
  596.   ${EndIf}
  597. FunctionEnd
  598.  
  599. !verbose 3
  600.